import Vue from 'vue'
import Vuex from 'vuex'
import { login } from '../api/user'
import user from '@/modules/user.js'
import { saveToken, getToken } from '../utils/storage'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    // 优先从localstroage中取出
    tokenInfo: getToken() || {}
  },
  mutations: {
    getToken (state, newTokenInfo) {
      state.tokenInfo = newTokenInfo
    }
  },
  actions: {
    // context对象会自动传入，它与store示例具有相同的方法和context对象action的名字: function(context, 载荷) {// 1. 发异步请求, 请求数据// 2. commit调用mutation来修改/保存数据// context.commit('mutation名', 载荷)}
    async setToken (context, userInfo) {
      try {
        // console.log(2)
        const { data: { data } } = await login(userInfo)
        // console.log(data)
        // console.log(3)
        context.commit('getToken', data)
        // 将token存储到浏览器本地
        saveToken(data)
        // this.$toast.success('登录成功')
      } catch (err) {
        // 将错误抛给调用这个actions的函数
        throw new Error(err)
      }
    }
  },
  modules: {
    user
  },
  getters: {}
})
